package com.wocao.admin.business;

import com.wocao.admin.vo.login.CheckEmailCodeVo;
import com.wocao.commom.constant.RedisConstant;
import com.wocao.system.service.EmailService;
import com.wocao.system.service.RedisService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 邮件发送服务业务类
 *
 * @author sunhao
 * @date 2021/10/28
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
@Service
@Slf4j
public class EmailBusiness {

    @Autowired
    private EmailService emailService;

    @Autowired
    private RedisService redisService;

    /**
     * 功能描述: 发送邮箱验证码<br>
     *
     * @param toMailUrl 邮箱地址
     * @return java.lang.String
     * @author eggg 2021/10/28 20:09
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    public String sendRegisterEmail(String toMailUrl) {
        String code = emailService.sendRegisterEmail(toMailUrl);
        if (StringUtils.isNotBlank(code)) {
            // 缓存验证码五分钟,必须在五分钟内进行验证,否则验证码会失效.
            String key = redisService.key(RedisConstant.SYS_CACHE_EMAIL_CODE, toMailUrl);
            redisService.setex(key, code, RedisConstant.FIVE_MIN_TIME_S);
        }
        return code;
    }

    /**
     * 功能描述: 校验邮箱验证码<br>
     *
     * @param checkEmailCodeVo 校验邮箱验证码实体
     * @return java.lang.String 校验结果
     * @author eggg 2021/10/29 11:25
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    public String checkEmailCode(CheckEmailCodeVo checkEmailCodeVo) {
        String key = redisService.key(RedisConstant.SYS_CACHE_EMAIL_CODE, checkEmailCodeVo.getEmail());
        String redisCode = redisService.get(key);
        if (StringUtils.equals(redisCode, checkEmailCodeVo.getCode())) {
            redisService.del(key);
            return null;
        }
        return "验证码校验失败！";
    }

}
